package com.duke.finca.web;

import java.util.Iterator;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.duke.finca.domain.Parametro;
import com.duke.finca.domain.Proveedor;
import com.duke.finca.service.ParametroService;
import com.duke.finca.service.ProveedorService;

/**
 * Todos los elementos estan precargados en esta clase, si no existen, se cargan de la base de datos, solo una vez
 */
@Controller("comboModelActionBean")
@Scope("session")
public class ComboModelActionBean {

    @Autowired
    private ParametroService parametroService;
    @Autowired
    private ProveedorService proveedorService;
    

    private List<Parametro> listaTipoProceso;
    private List<Parametro> listaTipoActividad;
    private List<Parametro> listaComplejidad;
    private List<Parametro> listaTipoTarea;
    private List<Parametro> listaEstadoAsignacion;
    private List<Parametro> listaTipoDocumento;   
    private List<Parametro> listaSede;
    private List<Parametro> listaArete;
    private List<Parametro> listaProcedencia; 
    private List<Proveedor> listaProveedor;   
    
    
    public List<Proveedor> getListaProveedor() {
    	listaProveedor=proveedorService.selectAll();
		return listaProveedor;
	}
	public void setListaProveedor(List<Proveedor> listaProveedor) {
		
		this.listaProveedor = listaProveedor;
	}
	public List<Parametro> getListaTipoProceso() {
        if(listaTipoProceso ==null)
            listaTipoProceso = parametroService.listarTiposProceso();
        return listaTipoProceso;
    }
    public List<Parametro> getListaTipoActividad() {
        if(listaTipoActividad==null)
            listaTipoActividad = parametroService.listarTiposActividad();
        return listaTipoActividad;
    }
    public List<Parametro> getListaComplejidad() {
        if(listaComplejidad == null)
            listaComplejidad = parametroService.listarIndicadoresComplejidad();
        return listaComplejidad;
    }
    public List<Parametro> getListaTipoTarea() {
        if(listaTipoTarea == null)
            listaTipoTarea = parametroService.listarTiposTarea();
        return listaTipoTarea;
    }
    public List<Parametro> getListaEstadoAsignacion() {
        if(listaEstadoAsignacion == null)
            listaEstadoAsignacion = parametroService.listarEstadoSegunMovimiento();
        return listaEstadoAsignacion;

    }

    public List<Parametro> getListaTipoDocumento() {
        if(listaTipoDocumento==null)
            listaTipoDocumento = parametroService.listarTiposDocumento();
        return listaTipoDocumento;

    }
    
    public List<Parametro> getListaSede() {
        if(listaSede==null)
        	listaSede = parametroService.listarSedes();
        return listaSede;
    }
    public List<Parametro> getListaArete() {
        //if(listaArete==null)
        	listaArete = parametroService.listarAretes();
        return listaArete;
    }
    public List<Parametro> getListaProcedencia() {
        if(listaProcedencia==null)
        	listaProcedencia = parametroService.listarProcedencias();
        return listaProcedencia;
    }

    public Parametro getTipoProceso(Long value){
        return findParametro(getListaTipoProceso().iterator(), value.toString());
    }
    public Parametro getIndicadorComplejidad(Long value){
        return findParametro(getListaComplejidad().iterator(), value.toString());
    }
    public Parametro getTipoTarea(Long value) {
        return findParametro(getListaTipoTarea().iterator(), value.toString());
    }
    public Parametro getEstadoSegunMovimiento(String value) {
        return findParametro(getListaEstadoAsignacion().iterator(), value);
    }

    private Parametro findParametro(Iterator<Parametro> it, String value){
        while(it.hasNext()){
            Parametro parametro = it.next();
            if(parametro.getValor().equals(value))
                return parametro;
        }
        return null;
    }

}
